package com.ruoyi.familyManagement.service;

import java.util.List;

import com.ruoyi.familyManagement.domain.DocFamily;
import com.ruoyi.familyManagement.domain.vo.FamilyInfoAndContractedInfo;
import com.ruoyi.familyManagement.domain.vo.FamilyUserInfo;
import com.ruoyi.familyManagement.domain.vo.FamilyVO;

/**
 * 家庭表Service接口
 *
 * @author ruoyi
 * @date 2025-08-14
 */
public interface IDocFamilyService {
    /**
     * 查询家庭表
     *
     * @param famliyId 家庭表主键
     * @return 家庭表
     */
    public DocFamily selectDocFamilyByFamliyId(Long famliyId);

    /**
     * 查询家庭表列表
     *
     * @param docFamily 家庭表
     * @return 家庭表集合
     */
    public List<DocFamily> selectDocFamilyList(DocFamily docFamily);

    /**
     * 新增家庭表
     *
     * @param docFamily 家庭表
     * @return 结果
     */
    public int insertDocFamily(DocFamily docFamily);

    /**
     * 修改家庭表
     *
     * @param docFamily 家庭表
     * @return 结果
     */
    public int updateDocFamily(DocFamily docFamily);

    /**
     * 批量删除家庭表
     *
     * @param famliyIds 需要删除的家庭表主键集合
     * @return 结果
     */
    public int deleteDocFamilyByFamliyIds(Long[] famliyIds);

    /**
     * 删除家庭表信息
     *
     * @param famliyId 家庭表主键
     * @return 结果
     */
    public int deleteDocFamilyByFamliyId(Long famliyId);

    /**
     * 根据用户id查询用户家庭信息
     *
     * @param userId 用户id
     * @return FamilyVO
     */
    FamilyVO findFamilyByUserId(Long userId);

    /**
     * 添加家庭信息
     *
     * @param familyVO 家庭信息
     */
    void insertDocFamilyVO(FamilyVO familyVO);

    /**
     * 添加家庭中间表信息
     *
     * @param userId   用户id
     * @param username 用户账号
     */
    void insertDocFamilyUser(Long userId, String username);

    /**
     * 获取家庭成员信息
     *
     * @param userId 用户id
     * @return FamilyUserInfo
     */
    List<FamilyUserInfo> getFamilyUserInfo(Long userId);

    /**
     * 根据用户账号添加家庭成员
     *
     * @param userId   当前用户id
     * @param username 被添加用户账号
     */
    void addFamilyUser(Long userId, String username);

    /**
     * 校验家庭人数
     *
     * @param userId 当前用户id
     * @return int
     */
    int checkFamilyUserNum(Long userId);

    /**
     * 校验用户是否存在
     *
     * @param username 用户名
     * @return boolean
     */
    boolean checkIsExist(String username);

    /**
     * 校验是否是医生
     *
     * @param username 用户名
     * @return boolean
     */
    boolean checkIsDoctor(String username);

    /**
     * 校验是否已有团队
     *
     * @param username 用户名
     * @return boolean
     */
    boolean checkIsTeam(String username);

    /**
     * 校验是否已有家庭
     * @param userId 用户id
     * @return int 0-无家庭 1-有家庭
     */
    int findFamilyIdByUserId2(Long userId);

    /**
     * 根据用户id查询用户家庭信息和已签约列表信息
     * @param userId 用户id
     * @return List<FamilyInfoAndContractedInfo>
     */
    List<FamilyInfoAndContractedInfo> findFamilyByUserIdAndContracted(Long userId);

}
